解决 Git 中大小写敏感问题
案例
默认情况下,GIt 是对文件大小写不敏感的,因此当我们在项目中对某个文件重命名时,就很容易发现重命名后的文件并不会在工作区被检测出来:
而为了解决这个问题,我们可以将本地 Git 工程设置为大小写敏感:
git config core.ignorecase false
# 也可以设置为全局大小写敏感
git config -g core.ignorecase false
然后我们就会发现,再次重命名后,就能侦测到变化,并且可以进行提交代码了。这时新的问题又会接踵而至,当我们 push 到远程仓库,就会发现大写文件与小写文件会同时存在:
这着实让人感到崩溃,本地与远程仓库不一致,此时除非重新拉取整个仓库,或者执行魔法命令:git rm --cached README.md
,此时重新提交一个新的 commit,才能完全一致。
如何避免大小写带来的不一致性问题?
长话短说,首先我们不要遇到问题马上就去修改 core.ignorecase
这个命令然后进行提交,因为该配置仅对本地生效,实际上远程 Git 服务或者他人的本地仓库,依然会忽略大小写,最简单的方式就是重命名时请不要只修改大小写。
若真的需要仅重命名大小写,推荐以下步骤:
-
备份一份文件;
-
删除原文件,并提交代码;
-
重命名第 1 步中备份的文件,并提交代码。
通过以上步骤,实际上我们生成了 2 次 commit,并执行了不同的操作,这样不论如何 Git Flow 上都能安全识别。